Evite significados duplos
Você selecionou deliberadamente uma palavra que tem mais de um significado e essa primeira decisão é o problema. Há muitas palavras problemáticas para os programadores. Outro exemplo seria phone. Você pode phonealguém, ou você pode ter um phoneno seu bolso.
Use Getters e Setters
A nomeação padrão para a maioria dos objetos são os métodos getters / settings para propriedades.
Battery.Charge // would be a property
Battery.setCharge(value) // would set the property
Battery.getCharge() // would get the property
Propriedades são estados não substantivos
Eu acho que você está enganado ao classificar propriedades de objetos como substantivos, e variáveis também podem ser pensadas em estados. São estados relevantes para o escopo local de sua existência.
Você pode descrever o valor que eles possuem como substantivo, mas não tenho certeza se isso é verdade em todos os casos.
Na terminologia OOP, as propriedades do objeto descrevem o estado desse objeto. No seu caso, Batteryé um objeto e Chargeé um estado. Portanto, isso seria uma propriedade do objeto, mas isso depende do contexto de como ele é usado.
Se você precisa ser capaz de Chargecarregar a bateria e também saber o que é atual Charge, então você tem um problema.
Usando o escopo para aplicar o contexto
Contexto é o que esclarecerá qual significado de uma palavra você pretende que um método ou propriedade transmita. O escopo é definir a acessibilidade de uma propriedade / método de fora do objeto.
Batter._charge // a hidden private property
Battery.setCharge(value) // would set the private property
Battery.getCharge() // would get the private property
Battery.Charge() // would perform the Charge action
Métodos são verbos
Você pode descrever o método de um objeto como um verbo, mas a palavra ação é mais adequada. Na terminologia OOP, você executa ações em objetos usando seus métodos. É uma má forma modificar a propriedade de um objeto de fora do objeto. É preferível chamar um método que execute as ações necessárias que fazem com que seu estado mude.
A palavra Chargeé um verbo, mas também é um substantivo. Quando usado para chamar o método de uma ação, fica claro que o verbo está sendo usado Battery.Charge(....).
Mas, o contexto é muito importante. Embora a palavra Charge()seja um verbo, não é tão significativa quanto startCharging().
Os métodos válidos para Batterypoderiam incluir Charging, Discharging, setCharge, getCharge, hasCharge, Dischargee Charged.
Métodos simples de uma palavra geralmente não explicitam claramente suas ações, mas existem alguns casos como opene closeonde pouca explicação é necessária.
Portanto, não há realmente uma resposta correta sobre como nomear esses tipos de propriedades / métodos. Exceto que você precisa usar as técnicas acima com sabedoria para garantir que não haja confusão.